# _*_ coding:utf-8 _*_
# 开发团队: Mavericks
# 开发人员：Maverick·Ming
# 开发IDE： PyCharm
#   项目名：HelloWorld
#   文件名：5.03 不定长参数.py
# 开发时间：2021/3/24 10:54

# 定义一个函数，求任意个数字的和（不限定参数个数）
# sum1函数限定了形参个数，实参不一致时就会报错
# def sum1(a, b, c):
#     print(a + b + c)
def sum1(*a):
    # 定义一个变量，保存返回的结果
    result = 0
    # 遍历元组，将元组中的数进行累加
    for t in a:
        result += t
    print('sum = ', result)


# sum1(50, 50, 900)
# sum1(50, 50)
# sum1(10)


# 在定义函数时，可以在形参前添加一个*，这样这个形参将会获取索所有的实参
# 它将所有的实参保存到一个元组中
# a, b, *c = (1,2,3,4,5) # 元组的解包
# *a 会接受所有位置实参，并会将这些实参统一保存到一个元组中（装包）
def sum2(*a):
    print('a = ', a, type(a))


# sum2(1, 2, 3, 4)


# 带*的参数只能由一个
# 带*的参数可以与其他参数配合使用 （元组解构）
def fn2(a, b, *c):
    print('a = ', a)
    print('b = ', b)
    print('c = ', c)


# fn2(1, 2, 3, 4)


# 当可变参数*n不写在最后时，*n后面的所有参数，都必须以关键字参数的形式传递
def fn3(a, *b, c):
    print('a = ', a)
    print('b = ', b)
    print('c = ', c)


# fn3(1, 2, 3, c=4)


# 当可变参数*n不写在最后时，*n后面的所有参数，都必须以关键字参数的形式传递
def fn4(*, a, b, c):
    print('a = ', a)
    print('b = ', b)
    print('c = ', c)


# fn4(a=2, b=3, c=4)


# **形参，可以接收其他关键字形参，**形参有且只能有一个，只能写到最后
def fn5(**a):
    print('a = ', a, type(a))


# fn5(a=2, b=3, c=4)
# 结果：a =  {'a': 2, 'b': 3, 'c': 4} <class 'dict'>


# 参数解包
def fn6(a, b, c):
    print('a = ', a)
    print('b = ', b)
    print('c = ', c)


# 创建一个元组
t = (10, 20, 30)
# 将t解包传递给a,b,c
# fn6(*t)
# 要求序列中元素的个数，必须与形参个数一致
# 创建一个字典
d = {'a':10, 'b':20, 'c':30}
# 将d解包传递给a,b,c
fn6(**d)
